package dingyunchi.chap.dao;

import dingyunchi.chap.entity.Sys_role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.sql.Date;
import java.util.List;

@Repository
public class Sys_roleDaolmpl implements Sys_roleDao {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public int saveSys_role(Sys_role sys_role) {
        String sql = "INSERT INTO sys_role(name, description, create_time, create_by, update_time, update_by, del_flag) "
                + "VALUES(?, ?, ?, ?, ?, ?, ?)";
        return jdbcTemplate.update(sql,
                sys_role.getName(),
                sys_role.getDescription(),
                new Date(sys_role.getCreate_time().getTime()),
                sys_role.getCreate_by(),
                new Date(sys_role.getUpdate_time().getTime()),
                sys_role.getUpdate_by(),
                sys_role.getDel_flag()
        );
    }


    @Override
    public int insertSys_role(Sys_role sys_role) {
        return jdbcTemplate.update(
                "INSERT INTO sys_role(name, description, create_time, create_by, update_time, update_by, del_flag) "
                        + "VALUES(?, ?, ?, ?, ?, ?, ?)",
                sys_role.getName(),
                sys_role.getDescription(),
                new Date(sys_role.getCreate_time().getTime()),
                sys_role.getCreate_by(),
                new Date(sys_role.getUpdate_time().getTime())
        );
    }

    /**
     * 获取所有的系统角色
     *
     * @return 系统角色列表
     */
    @Override
    public List<Sys_role> getAllSys_role() {
        // 定义SQL查询语句，用于获取所有系统角色信息
        String sql = "SELECT * FROM sys_role";
        // 执行查询并映射结果到Sys_role对象列表
        return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Sys_role.class));
    }

    /**
     * 根据ID获取系统角色
     *
     * @param id 系统角色的ID
     * @return 对应ID的系统角色对象，如果不存在则返回null
     */
    @Override
    public Sys_role getSys_roleById(Integer id) {
        // 定义SQL查询语句，用于根据ID获取系统角色信息
        String sql = "SELECT * FROM sys_role WHERE id=?";
        // 执行查询并映射结果到Sys_role对象
        return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Sys_role.class), id);
    }

    /**
     * 更新系统角色信息
     *
     * @param sys_role 要更新的系统角色对象，包含更新后的信息
     * @return 影响的行数，表示更新成功的记录数
     */
    @Override
    public int updateSys_role(Sys_role sys_role) {
        // 定义SQL更新语句，用于更新系统角色的名称、描述、更新时间和更新者
        String sql = "UPDATE sys_role SET name=?, description=?, update_time=?, update_by=? WHERE id=?";
        // 执行更新操作
        return jdbcTemplate.update(sql,
                sys_role.getName(),
                sys_role.getDescription(),
                new Date(System.currentTimeMillis()),
                sys_role.getUpdate_by(),
                sys_role.getId());
    }

    /**
     * 根据ID删除系统角色
     *
     * @param id 要删除的系统角色的ID
     * @return 影响的行数，表示删除成功的记录数
     */
    @Override
    public int deleteSys_roleById(Integer id) {
        // 定义SQL删除语句，用于根据ID删除系统角色
        String sql = "DELETE FROM sys_role WHERE id=?";
        // 执行删除操作
        return jdbcTemplate.update(sql, id);
    }

    /**
     * 检查系统角色名称是否已存在
     *
     * @param name 系统角色的名称
     * @return 如果名称已存在返回true，否则返回false
     */
    @Override
    public boolean isNameExists(String name) {
        // 定义SQL查询语句，用于检查系统角色名称是否已存在
        String sql = "SELECT COUNT(*) FROM sys_role WHERE name = ?";
        // 执行查询并获取结果
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class, name);
        // 判断结果以确定名称是否已存在
        return count != null && count > 0;
    }
}